/*
    数字 n 代表生成括号的对数，请你设计一个函数，用于能够生成所有可能的并且 有效的 括号组合。
    示例：

    输入：n = 3
    输出：[
        "((()))",
        "(()())",
        "(())()",
        "()(())",
        "()()()"
        ]

 * @lc app=leetcode.cn id=22 lang=javascript
 *
 * [22] 括号生成
 */

// @lc code=start
/**
 * @param {number} n
 * @return {string[]}
 */
var generateParenthesis = function(n) {
    let result = [];
    /**
     * 
     * @param {number} left 
     * @param {number} right 
     * @param {string} str 
     */
    function dsf(left, right, str) {
        if(str.length == n * 2) {
            result.push(str);
            return;
        }
        if(left > 0) {
            dsf(left - 1, right, str + '(');
        }
        if(right > left) {
            dsf(left, right - 1, str + ')');
        }
    }
    dsf(n,n,'');
    return result;
};
function run () {
    let args = [
        3
    ];
    return generateParenthesis(...args);
}
module.exports = run;